جزوه · فصل چهارم · جلسه ۴۷ · فرمان‌های جستجو در لینوکس ← بازگشت به فهرست
📘 فصل چهارم · جلسه ۴۷ فرمان‌های جستجو در لینوکس
📅 تاریخ: سه‌شنبه، ۲۷ مرداد ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian (کالی) · 📦 Red Hat
🔍 قبل از شروع، یه مثال ساده:

فرض کن تو یه کتابخونه بزرگ هستی و دنبال یه کتاب خاص می‌گردی. چهار تا راه داری: از فهرست راهنما (which)، از کاتالوگ کامل (whereis)، از سیستم امانت (locate) که سریعه ولی ممکنه قدیمی باشه، یا رفتن بین قفسه‌ها (find) که دقیق و به‌روزه ولی کندتره. هرکدوم برای یه کار خاصی مناسبه!

▍ مقدمه

در لینوکس، ابزارهای مختلفی برای جستجوی فایل‌ها، دستورات و محتوا وجود دارند. هر کدام از این ابزارها مزایا و معایب خاص خود را دارند و برای کاربردهای متفاوتی طراحی شده‌اند. در این جلسه با چهار ابزار اصلی جستجو آشنا می‌شویم:

▍ فرمان which

which مسیر کامل یک دستور اجرایی را در سیستم پیدا می‌کند. این دستور از متغیر محیطی PATH برای جستجو استفاده می‌کند.

┌──(ya3in㉿kali)-[~] └─$ which ls /usr/bin/ls └─$ which python3 /usr/bin/python3

توضیح: which فقط اولین مسیری که در PATH پیدا می‌کند را نمایش می‌دهد.

📌 نکته:

اگر چندین نسخه از یک دستور در سیستم نصب باشد، which فقط اولین نسخه را نشان می‌دهد.

▍ فرمان whereis

whereis علاوه بر مسیر فایل اجرایی، صفحه راهنما (man page) و کد منبع (source code) دستور را نیز نمایش می‌دهد.

┌──(ya3in㉿kali)-[~] └─$ whereis ls ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz └─$ whereis python3 python3: /usr/bin/python3 /usr/bin/python3.12 /usr/lib/python3 /usr/share/man/man1/python3.1.gz

توضیح:

💡 نکته:

whereis برای پیدا کردن همه چیز مربوط به یک دستور بسیار مفید است.

▍ فرمان locate

locate یک ابزار جستجوی سریع است که از یک دیتابیس برای پیدا کردن فایل‌ها استفاده می‌کند. این دیتابیس معمولاً در مسیر /var/lib/plocate/plocate.db (در سیستم‌های جدید) یا /var/lib/mlocate/mlocate.db قرار دارد.

┌──(ya3in㉿kali)-[~] └─$ locate .bashrc /home/ya3in/.bashrc /etc/bash.bashrc /usr/share/base-files/dot.bashrc

توضیح: locate همه فایل‌هایی که شامل .bashrc هستند را نمایش می‌دهد.

⚠️ نکته مهم:
  • مزیت: بسیار سریع است (چون از دیتابیس استفاده می‌کند).
  • عیب: دیتابیس به‌طور خودکار به‌روز نمی‌شود. برای به‌روزرسانی دستی، از دستور sudo updatedb استفاده کنید.
┌──(ya3in㉿kali)-[~] └─$ sudo updatedb

▍ فرمان find

find قدرتمندترین و دقیق‌ترین ابزار جستجو در لینوکس است. این دستور به‌صورت لحظه‌ای در سیستم فایل جستجو می‌کند و همیشه به‌روز است. با استفاده از گزینه‌های مختلف، می‌توانید جستجوهای بسیار پیشرفته‌ای انجام دهید.

📝 مثال‌های کاربردی find:
┌──(ya3in㉿kali)-[~] └─$ find /usr/bin -perm /4000

توضیح: پیدا کردن همه فایل‌های /usr/bin که دارای SUID (مجوز ۴۰۰۰) هستند.

┌──(ya3in㉿kali)-[~] └─$ find . -maxdepth 2 -name "*.txt"

توضیح: پیدا کردن فایل‌های .txt فقط تا عمق ۲ سطح از دایرکتوری جاری.

┌──(ya3in㉿kali)-[~] └─$ find . -name "*.txt"

توضیح: پیدا کردن همه فایل‌های .txt در دایرکتوری جاری و زیردایرکتوری‌ها.

• گزینه‌های پرکاربرد find

گزینه توضیح
-name "pattern" جستجو بر اساس نام (حساس به حروف بزرگ/کوچک)
-iname "pattern" جستجو بر اساس نام (بدون حساسیت به حروف)
-type f/d/l نوع فایل (f=معمولی، d=دایرکتوری، l=لینک)
-size +100M فایل‌های بزرگ‌تر از ۱۰۰ مگابایت
-mtime -7 فایل‌های تغییر یافته در ۷ روز اخیر
-perm /4000 فایل‌های با SUID
-maxdepth N حداکثر عمق جستجو (N سطح)
-exec command {} \; اجرای دستور روی فایل‌های پیدا شده

• مثال‌های پیشرفته find

┌──(ya3in㉿kali)-[~] └─$ find /var/log -name "*.log" -mtime +30 -type f

توضیح: پیدا کردن فایل‌های لاگ (.log) در /var/log که بیش از ۳۰ روز از تغییرشان گذشته است.

┌──(ya3in㉿kali)-[~] └─$ find . -type f -size +10M -exec ls -lh {} \;

توضیح: پیدا کردن فایل‌های بزرگ‌تر از ۱۰ مگابایت و نمایش جزئیات آنها با ls -lh.

🏆 بهترین ابزار جستجو کدام است؟

پاسخ به این سوال بستگی به نیاز شما دارد:

  • اگر می‌خواهید مسیر یک دستور را پیدا کنید: از which یا whereis استفاده کنید.
  • اگر به جستجوی سریع نیاز دارید و به‌روز بودن فایل‌ها برایتان حیاتی نیست: از locate استفاده کنید.
  • اگر به جستجوی دقیق، به‌روز و پیشرفته نیاز دارید: از find استفاده کنید.

find به دلیل قابلیت‌های پیشرفته، دقت بالا و به‌روز بودن، بهترین ابزار برای جستجوی حرفه‌ای در لینوکس است.

▍ جدول مقایسه فرمان‌های جستجو

ویژگی which whereis locate find
سرعت ⚡⚡⚡ سریع ⚡⚡ سریع ⚡⚡⚡⚡ خیلی سریع ⚡ کند (برای جستجوی وسیع)
دقت متوسط متوسط پایین (وابسته به دیتابیس) ⭐ بالا
به‌روز بودن ✅ لحظه‌ای ✅ لحظه‌ای ❌ وابسته به updatedb ✅ لحظه‌ای
جستجوی محتوا ❌ خیر ❌ خیر ❌ خیر (فقط نام) ✅ بله (با -exec و grep)
پشتیبانی از الگو ❌ خیر ❌ خیر ✅ بله (با --regex) ✅ بله (با -regex)
کاربرد اصلی پیدا کردن مسیر دستورات پیدا کردن مسیر دستورات + man جستجوی سریع فایل‌ها جستجوی پیشرفته و دقیق
✅ تمرین پیشنهادی:
  • با which مسیر دستورات bash، python و grep را پیدا کنید.
  • با whereis اطلاعات کامل دستور ls را مشاهده کنید.
  • با locate همه فایل‌های .conf سیستم را پیدا کنید.
  • با find همه فایل‌های .txt در دایرکتوری خانه خود را پیدا کنید.
  • با find فایل‌های بزرگ‌تر از ۵۰ مگابایت را در سیستم پیدا کنید.